package com.solution.admin.order.dao.impl;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.solution.admin.order.dao.OrderDao;
import com.solution.admin.order.entity.OrderEntity;
import com.solution.admin.order.entity.OrderStatisticsEntity;
import com.solution.common.dao.impl.BaseDaoImpl;
import com.solution.common.page.PageBean;
import com.solution.common.page.PageParam;
import com.solution.pc.order.entity.CustomerOrderStatisticsEntity;

/**
 * 订单信息DAO实现
 * @author lilp
 * @date 2017-09-14 23:35:39
 */
@Repository
public class OrderDaoImpl extends BaseDaoImpl<OrderEntity> implements OrderDao {

	/**
	 * 保存订单信息信息
	 * @param orderEntity
	 * @return
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	@Override
	public long saveOrder(OrderEntity orderEntity) {
		return super.insert(orderEntity);
	}

	/**
	 * 分页查询订单信息信息
	 * @param pageParam 分页对象
	 * @param order 分页参数
	 * @return PageBean 分页参数及数据
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	public PageBean listOrderPage(PageParam pageParam, Map<String, Object> param) {
		return super.listPage(pageParam, param);
	}
	
	/**
	 * 查询发货单列表
	 * @param pageParam
	 * @param paramMap
	 * @return
	 */
	@Override
	public PageBean listOrderDeliveryBillPage(PageParam pageParam,Map<String, Object> paramMap){
		return super.listPage(pageParam, paramMap, "listOrderDeliveryBillPage", "countOrderDeliveryBillPage");
	}
	
	
	/**
	 * 分页查询待确认的付款凭证列表
	 * @param pageParam
	 * @param paramMap
	 * @return
	 */
	@Override
	public PageBean listConfirmPayOrderPage(PageParam pageParam, Map<String, Object> paramMap){
		return super.listPage(pageParam, paramMap, "listConfirmPayOrderPage", "countConfirmPayOrderPage");
	}
	
	
	/**
	 * 更新订单信息
	 * @param orderEntity
	 * @return
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	@Override
	public int updateOrder(OrderEntity orderEntity) {
		return super.update(orderEntity);
	}

	/**
	 * 删除订单信息
	 * @param orderId
	 * @return
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	public int deleteOrderById( Long id) {
		return super.deleteById(id);
	}
	
	/**
	 * 根据条件查询订单信息
	 * @param param
	 * @return
	 * @author lilp
	 * @date 2017-09-14 23:35:39
	 */
	@Override
	public List<OrderEntity> listOrder( Map<String, Object> param) {
		return super.listBy(param);
	}
	
	/**
	 * 订单调价
	 * @param order
	 */
	@Override
	public int adjustOrderPrice(OrderEntity order){
		return getSessionTemplate().update(getStatement("updateOrderPrice"),order);
	}
	
	/**
	 * 审核订单
	 * @param param
	 * @return
	 */
	@Override
	public int updateOrderApproveResult(Map<String, Object> param){
		return getSessionTemplate().update(getStatement("updateOrderApproveResult"),param);
	}
	
	/**
	 * 取消订单
	 * @param param
	 * @return
	 */
	public int cancelOrder(Map<String, Object> param){
		return getSessionTemplate().update(getStatement("updateOrderCancelStatus"),param);
	}
	
	/**
	 * 更新订单合同状态
	 * @param param
	 * @return
	 */
	public int updateOrderContractStatus(Map<String, Object> param){
		return getSessionTemplate().update(getStatement("updateOrderContractStatus"),param);
	}
	
	/**
	 * 更新订单状态
	 * @param payParam
	 * @return
	 * @author llp
	 */
	public int updateOrderStatus(Map<String, Object> payParam){
		return getSessionTemplate().update(getStatement("updateOrderStatus"),payParam);
	}
	
	/**
	 * 查询首页客户订单数量统计
	 * @param param
	 * @return
	 * @author llp
	 */
	public List<CustomerOrderStatisticsEntity> listCustomerOrderStatistics(Map<String, Object> param){
		return getSessionTemplate().selectList(getStatement("listCustomerOrderStatistics"),param);
	}
	
	/**
	 * 查询我的订单
	 * @param pageParam
	 * @param paramMap
	 * @return
	 */
	public PageBean listMyOrderPage(PageParam pageParam,Map<String, Object> paramMap){
		return super.listPage(pageParam, paramMap, "listMyOrderListPage", "countListMyOrderListPage");
	}

	/**
	 * 根据订单编号获取订单
	 * @param orderCode
	 * @return
	 * @author xkl
	 * @date 2017年11月21日 下午4:28:33
	 */
	@Override
	public OrderEntity getOrderByCode(String orderCode) {
		return getSessionTemplate().selectOne(getStatement("getByCode"), orderCode);
	}

	/**
	 * 修改订单评论状态
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2017年12月13日 下午2:16:45
	 */
	@Override
	public Integer updateOrderAppraiseFlag(Map<String, Object> paramMap) {
		return getSessionTemplate().update(getStatement("updateOrderAppraiseFlag"), paramMap);
	}
	
	/**
	 * 查询个人订单状态统计数量
	 * @param param
	 * @return
	 * @author llp
	 */
	@Override
	public OrderEntity listOrderStatusCount(Map<String, Object> param){
		return  getSessionTemplate().selectOne(getStatement("listOrderStatusCount"), param);
	}

	/**
	 * 确认核销订单
	 * @param param
	 * @return
	 * @author xkl
	 * @date 2017年12月23日 上午10:44:18
	 */
	@Override
	public Integer confirmVerifyOrder(Map<String, Object> param) {
		return  getSessionTemplate().update(getStatement("confirmVerifyOrder"), param);
	}

	/**
	 * 查询订单数据
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年1月2日 下午4:35:03
	 */
	@Override
	public Map<String, Object> queryOrderData(Map<String, Object> paramMap) {
		return getSessionTemplate().selectMap(getStatement("queryOrderData"), paramMap, "orderTimeGroup");
	}

	/**
	 * 查询待付款、待审核、待发货、代签收4种状态订单数量
	 * @return
	 * @author xkl
	 * @date 2018年1月2日 下午4:57:08
	 */
	@Override
	public Map<String, Object> queryOrderStatusSum() {
		return getSessionTemplate().selectMap(getStatement("queryOrderStatusSum"), "type");
	}
	
	/**
	 * 根据状态获取订单数量<br>
	 * （如果参数为空，则返回所有订单数量）
	 * 
	 * @param orderStatus
	 * @return int
	 * @author xu_cc
	 * @throws Exception
	 *             exception
	 * @Date 创建时间：2018年1月2日 上午11:53:11
	 */
	public int getOrderCount(Map<String, Object> param) {
		return  getSessionTemplate().selectOne(getStatement("countByParam"), param);
	}

	/**
	 * 查询订单数据列表
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年1月5日 下午3:28:23
	 */
	@Override
	public List<Object> queryOrderDataList(Map<String, Object> paramMap) {
		return getSessionTemplate().selectList(getStatement("queryOrderData"), paramMap);
	}

	/**
	 * 结束过期订单
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年1月6日 下午4:49:46
	 */
	@Override
	public Integer closeExpiredOrder(Map<String, Object> paramMap) {
		return getSessionTemplate().update(getStatement("closeExpiredOrder"), paramMap);
	}

	/**
	 * 保存交易流水
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年1月23日 下午2:26:46
	 */
	@Override
	public int saveOrderTrade(Map<String, Object> paramMap) {
		return getSessionTemplate().insert(getStatement("saveOrderTrade"), paramMap);
	}

	/**
	 * 根据交易流水号获取订单号
	 * @param outTradeNo
	 * @return
	 * @author xkl
	 * @date 2018年1月23日 下午2:27:35
	 */
	@Override
	public String getOrderCodeByOutTradeNo(String outTradeNo) {
		return getSessionTemplate().selectOne(getStatement("getOrderCodeByOutTradeNo"), outTradeNo);
	}
	
	/**
	 * 查询业务员订单数量
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年2月12日 下午4:05:39
	 */
	public Integer countSalesmanOrderSum(Map<String, Object> paramMap){
		return getSessionTemplate().selectOne(getStatement("countSalesmanOrderSum"), paramMap);
	}

	/**
	 * 根据id集合查询用户订单统计信息
	 * @param paramMap
	 * @return
	 * @author xkl
	 * @date 2018年5月16日 下午2:49:00
	 */
	@Override
	public Map<Long, Map<String, Object>> listUsersCustomerOrderInfo( Map<String, Object> paramMap) {
		return getSessionTemplate().selectMap(getStatement("listUsersCustomerOrderInfo"), paramMap, "CUSTOMER_ID");
	}
	
	/**
	 * 查询订单数量及金额统计
	 * @param paramMap
	 * @return
	 */
	public OrderStatisticsEntity selectOrderStatistics( Map<String, Object> paramMap){
		return getSessionTemplate().selectOne(getStatement("selectOrderStatistics"), paramMap);
	}
}
